package main

import (
	"io"
	"log"
	"net"
	"os"
)

func main() {
	conn, err := net.Dial("tcp", ":2020")
	if err != nil {
		panic(err)
	}

	done := make(chan struct{})
	//新开一个 Goroutine 用于接收消息
	go func() {
		io.Copy(os.Stdout, conn) // 操作I/O，从 TCP 连接中读取数据并写入标准输出中
		log.Println("done")      // 输出日志信息表示消息接收完成
		done <- struct{}{}       // 向通道发送信号表示接收消息完成
	}()

	mustCopy(conn, os.Stdin) // 操作I/O，从标准输入中读取数据并写入 TCP 连接
	conn.Close()
	<-done // 等待接收消息的 Goroutine 结束
}

func mustCopy(dst io.Writer, src io.Reader) {
	if _, err := io.Copy(dst, src); err != nil {
		log.Fatal(err)
	}
}
